home *** CD-ROM | disk | FTP | other *** search
/ InterCD 1999 March / marchl_1999.iso / Site Building / IMS Engine / _setup.1 / vmmech.js < prev    next >
Encoding:
JavaScript  |  1999-02-16  |  34.4 KB  |  1,362 lines

  1. //<!--
  2. //*****************************************************************************//
  3. // (C) Copyright Virtual Mechanics 1998 Version 1.05, All rights reserved.     //
  4. // All copies of this software must include this Copyright notice.             //
  5. //*****************************************************************************//
  6. var Version = 0;
  7. nm = new Array();
  8. Active = new Array();
  9. ob   = new Array();
  10. cpox = new Array();
  11. cpoy = new Array();
  12. spox = new Array();
  13. spoy = new Array();
  14. epox = new Array();
  15. epoy = new Array();
  16. var Lpox;
  17. var Lpoy;
  18. dpox = new Array();
  19. dpoy = new Array();
  20. atDis  = new Array();
  21. DisPt  = new Array();
  22. disStep = new Array();
  23. Plen = new Array();
  24. Path = new Array();
  25. obRef= new Array();
  26. Gtyp = new Array();
  27. Gnpt=new Array();
  28. Gnam = new Array();
  29. Glen = new Array();
  30. Gszx = new Array();
  31. Gszy = new Array();
  32. Gorx = new Array();
  33. Gory = new Array();
  34. Gpxl = new Array();
  35. Gpyl = new Array();
  36. Gbrl = new Array();
  37. Gbrt = new Array();
  38. Gbrr = new Array();
  39. Gbrb = new Array();
  40. Grps = new Array();
  41. Grpl = new Array();
  42. Gspt = new Array();
  43. Snam = new Array();
  44. Scnt = new Array();
  45. PathCount = new Array();
  46. LastPt  = new Array();
  47. lstVal = new Array();
  48.  
  49. TimeLeft = new Array();
  50. AEvent = new Array();
  51. WDEvent = new Array();
  52. WAEvent = new Array();
  53. AValue = new Array();
  54. ATime = new Array();
  55. AEnter = new Array();
  56. ALeave = new Array();
  57. AKey = new Array();
  58. IKey = new Array();
  59. DEvent = new Array();
  60. DValue = new Array();
  61. DTime = new Array();
  62. DEnter = new Array();
  63. DLeave = new Array();
  64. DAKey = new Array();
  65. DIKey = new Array();
  66. WASOp  = new Array();
  67. WAGOp  = new Array();
  68. OpForm = new Array();
  69. WAAObj = new Array();
  70. WADObj = new Array();
  71. WAForm = new Array();
  72. WASVal = new Array();
  73. WAGVal = new Array();
  74. WACgeo = new Array();
  75. WACsnd = new Array();
  76. WACact = new Array();
  77. WACevt = new Array();
  78. WACatt = new Array();
  79. WACobj = new Array();
  80. WANobj = new Array();
  81. WALink = new Array();
  82. WDAObj = new Array();
  83. WDDObj = new Array();
  84. EndPath = new Array();
  85. MType = new Array();
  86.  
  87. MPath  = new Array();
  88. MRate  = new Array();
  89. MTime  = new Array();
  90. MDelay = new Array();
  91. MRepeat= new Array();
  92. MCount = new Array();
  93. MPLen  = new Array();
  94. MDir   = new Array();
  95. MGWst  = new Array();
  96. MGNth  = new Array();
  97. MGEst  = new Array();
  98. MGSth  = new Array();
  99.  
  100. eDELAY = (1);
  101. eDELAY_TIME = (2);
  102. eMOUSE = (4);
  103. eMOUSE_OVER = (8);
  104. eLMOUSE = (16);
  105. eRMOUSE = (32);
  106. eKEY = (64);
  107. eOBJECT_ENTER = (128);
  108. eOBJECT_ENTER_LIST = (256);
  109. eOBJECT_LEAVE = (512);
  110. eOBJECT_LEAVE_LIST = (1024);
  111. eLT_VALUE =    (2048);
  112. eEQ_VALUE = (4096);
  113. eGT_VALUE =    (8192);
  114. eVALUE      = (16384);
  115. eENDPATH  = (32768);
  116. eACTIVATE_1 = (65536);
  117. eACTIVATE_2    = (131072);
  118. eANDtest = (1<<30);
  119. var pageTime = -1;// link timer
  120. var Cobj;
  121. var Catt;
  122. var Cact;
  123. var Cevt;
  124. var Cgrp;
  125. var Cgeo;
  126. var Csnd;
  127. var Cpob;
  128. var Gpgo;
  129. var gcx;
  130. var gcy;
  131. var gcx;
  132. var gcy;
  133. var cmx = 0;
  134. var cmy = 0;
  135. var smx = -9999;
  136. var smy = -9999;
  137. var slm = 0;
  138. var llm = -9999;
  139. var sky = " ";
  140. var lstsnd = -1;
  141.  
  142. var lmx = -9999;
  143. var lmy = -9999;
  144. var lky = 0;
  145. var totObj;
  146. var mS;
  147. var mW;
  148. var waitTime;
  149. var GEO_TYPE = 7;
  150. var GEO_OPEN = 8;
  151. var GEO_COUNT= 32;
  152. ACT_XPATH_STOP     =(0);
  153. ACT_XPATH_OBJPTH =(1<<0);
  154. ACT_XPATH_OBJXYZ =(1<<1);
  155. ACT_XPATH_LEFT   =(1<<2);
  156. ACT_XPATH_RIGHT  =(1<<3);
  157. ACT_XPATH_MOUSE     =(1<<4);
  158. ACT_YPATH_STOP     =(0);
  159. ACT_YPATH_OBJPTH =(1<<8);
  160. ACT_YPATH_OBJXYZ =(1<<9);
  161. ACT_YPATH_UP     =(1<<10);
  162. ACT_YPATH_DOWN   =(1<<11);
  163. ACT_YPATH_MOUSE     =(1<<12);
  164. ACT_ZPATH_STOP     =(0);
  165. ACT_ZPATH_OBJPTH =(1<<16);
  166. ACT_ZPATH_OBJXYZ =(1<<17);
  167. ACT_ZPATH_IN     =(1<<18);
  168. ACT_ZPATH_OUT     =(1<<19);
  169. ACT_ZPATH_KEY     =(1<<20);
  170. ACT_PATH_STOP     =(0);
  171. ACT_PATH_START     =(1<<24);
  172. ACT_PATH_CENTER     =(1<<25);
  173. ACT_PATH_END     =(1<<26);
  174. ACT_GEO_WEST     =(1<<28);
  175. ACT_GEO_EAST     =(1<<29);
  176. ACT_GEO_NORTH    =(1<<30);
  177. ACT_GEO_SOUTH    =(1<<31);
  178. ACT_SETX         =(0xffffff00);
  179. ACT_SETY         =(0xffff00ff);
  180. ACT_SETZ         =(0xff00ffff);
  181. ACT_SETO         =(0xf0ffffff);
  182. ACT_SETF         =(0x0fffffff);
  183. ACT_GETX         =(0x000000ff);
  184. ACT_GETY         =(0x0000ff00);
  185. ACT_GETZ         =(0x00ff0000);
  186. ACT_GETO         =(0x0f000000);
  187. ACT_GETF         =(0xf0000000);
  188.  
  189. /**************************************************************************/
  190. var isNav4 = false, isIE4 = false;
  191. if (navigator.appVersion.charAt(0) >= "4") {
  192.     if (navigator.appName == "Netscape") {
  193.         isNav4 = true;
  194.         window.captureEvents(Event.MOUSEUP|Event.MOUSEDOWN|Event.MOUSEMOVE|Event.KEYPRESS);
  195.         window.onmousedown=NNmouseDown;
  196.         window.onmouseup=NNmouseUp;
  197.         window.onmousemove=NNmouseMove;
  198.         window.onkeypress=NNkeyPress;
  199.     }
  200.     else if (navigator.appVersion.indexOf("MSIE") != -1) {
  201.         window.document.onmousemove = IEmouseMove;
  202.         window.document.onkeypress  = IEkeyPress;
  203.         window.document.onmousedown = IEmouseDown;
  204.         window.document.onmouseup   = IEmouseUp;
  205.         window.document.onkeydown   = IEkeyPress;
  206.         window.document.ondragstart = IECancelEvent;
  207.         isIE4 = true;
  208.     }
  209. }
  210. function NNmouseMove(e) {
  211.     cmx = e.pageX;
  212.     cmy = e.pageY;
  213.     sclx = window.pageXOffset;
  214.     scly = window.pageYOffset;
  215. }
  216. function NNmouseDown(e) {
  217.     slm = slm | 1;
  218. //    window.releaseEvents(Event.MOUSEMOVE);
  219. //    window.releaseEvents(Event.MOUSEDOWN);
  220. //    document.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);
  221.     document.onmousemove=drag;
  222.     document.onmouseup=enddrag;
  223.     smx=e.pageX;
  224.     smy=e.pageY + window.pageYOffset;
  225.     return true;
  226. }
  227. function enddrag(e) {
  228.     slm = slm | 2;
  229.     smx = e.pageX + window.pageXOffset;
  230.     smy = e.pageY + window.pageYOffset;
  231.     document.onmousemove=0;
  232.     document.releaseEvents(Event.MOUSEMOVE);
  233.     document.releaseEvents(Event.MOUSEUP);
  234.     window.captureEvents(Event.MOUSEMOVE|Event.MOUSEDOWN|Event.KEYPRESS);
  235.     return false;
  236. }
  237. function drag(e) {
  238.     cmx = e.pageX + window.pageXOffset;
  239.     cmy = e.pageY + window.pageYOffset;
  240. }
  241.  
  242. function NNmouseUp(e) {
  243.     slm = slm | 2 + window.pageXOffset;
  244.     smx = e.pageX + window.pageXOffset;
  245.     smy = e.pageY + window.pageYOffset;
  246. }
  247.  
  248. function NNkeyPress(e) {
  249.     sky = String.fromCharCode(e.which);
  250. }
  251.  
  252. function IEmouseMove() {
  253.     cmx = window.event.clientX + document.body.scrollLeft;
  254.     cmy = window.event.clientY + document.body.scrollTop;
  255.     sclx = document.body.scrollLeft;
  256.     scly = document.body.scrollTop;
  257. }
  258.  
  259. function IEmouseDown() {
  260.     slm = slm | 1;
  261.     smx = window.event.clientX + document.body.scrollLeft;
  262.     smy = window.event.clientY + document.body.scrollTop;
  263. }
  264.  
  265. function IEmouseUp() {
  266.     slm = slm | 2;
  267.     smx = window.event.clientX + document.body.scrollLeft;
  268.     smy = window.event.clientY + document.body.scrollTop;
  269. }
  270.  
  271. function IEkeyPress() {
  272.     sky = window.event.keyCode;
  273. }
  274. function IECancelEvent() {
  275.     window.event.returnValue=false;
  276. }
  277. /**************************************************************************/
  278. function Setup() {
  279. // setup defaults
  280.     tmCount=0;
  281.  
  282.     obRef[0] = 0;
  283.     ob[0] = new Array();
  284.     ob[0] = 0;
  285.     ob[0].name = "Geo0";
  286.     ob[0].geo = 0;
  287.     ob[0].att = 0; 
  288.     ob[0].evt = 0; 
  289.     ob[0].act = 0;
  290.     ob[0].grp = 0;
  291.     ob[0].cpox =0.000000;
  292.     ob[0].cpoy =0.000000;
  293.     ob[0].cscx =1.000000;
  294.     ob[0].cscy =1.000000;
  295.     ob[0].crot =0.000000;
  296.     ob[0].flg = 0;
  297.  
  298.     MPath[0]  = 0;
  299.  
  300.     for(nob=1; nob<= pageObj; nob++) {
  301.         ref = pObjLst[nob];
  302.         cobj = obRef[ref];
  303.         spox[cobj] = ob[cobj].cpox;  
  304.         spoy[cobj] = ob[cobj].cpoy;
  305.         SetPath(cobj);
  306.  
  307.         reset(cobj);
  308.  
  309.         if(ob[cobj].flg & 16)
  310.             Active[cobj]    =  4;    // set to initial active state
  311.     }
  312. }
  313.  
  314. /***************************************************************************/
  315. function ticktime() {
  316.     doObjectList();
  317.     window.setTimeout("ticktime();", waitTime, "JavaScript");
  318. }
  319.  
  320. function doObjectList() {
  321. //    window.norefresh;
  322.     if(pageTime >= 0)
  323.     {
  324.         tmCount++;
  325.         if(tmCount > pageTime) 
  326.         {
  327.             window.location=pgLink;
  328.             pageTime = -1;
  329.         }
  330.     }
  331.  
  332.     if(lmx == smx) smx = -99999;
  333.     if(lmy == smy) smy = -99999;
  334.     if(lky == sky) sky = " ";
  335.     llt = 0;
  336.     if((llm & 2) == (slm & 2)) slm = (slm  & ~2);
  337.     if((llm & 1) == (slm & 1)) slm = (slm  & ~1);
  338.     lmx = smx;
  339.     lmy = smy;
  340.     lky = sky;
  341.     llm = slm;
  342.  
  343.     MoOvrTst();
  344.  
  345.     for(nob=1; nob<= pageObj; nob++) {
  346.         ref = pObjLst[nob];
  347.         gcx = 0;
  348.         gcy = 0;
  349.         cobj = obRef[ref]
  350.         Cgrp = ob[cobj].grp;
  351.         if(!Cgrp) doObject(cobj);
  352.     }
  353. }
  354.  
  355. function MoOvrTst() {
  356. for(i=0; i < MoLNo; i++) {
  357.  Cobj = Molst[i];
  358.   Cgeo = ob[Cobj].geo;
  359.   if(MouseOver() == 1) {
  360.     if(ob[Cobj].flg & 256) ob[Cobj].style.visibility = "visible";
  361.     else                   ob[Cobj].style.visibility = "hidden";
  362.   }
  363.   else {
  364.     if(ob[Cobj].flg & 128) ob[Cobj].style.visibility = "visible";
  365.     else                   ob[Cobj].style.visibility = "hidden";
  366.   }
  367. }}
  368.  
  369. //function MouseOver() {
  370. //  if ( cmx >= ob[Cobj].left && cmx <= ob[Cobj].right && cmy >= ob[Cobj].top && cmy <= ob[Cobj].bottom) return 1;
  371. //  return 0;
  372. //}
  373.  
  374. function doObject(cobj)
  375. {
  376.     Cobj = cobj;
  377.     Cgeo = ob[Cobj].geo;
  378.     Csnd = ob[Cobj].snd;
  379.     Cevt = ob[Cobj].evt;
  380.     Catt = ob[Cobj].att;
  381.     Cact = ob[Cobj].act;
  382.  
  383.     if(Cact)
  384.     {            
  385.         Cpob = MPath[Cact];
  386.         if(Cpob)
  387.             Cpgo = ob[Cpob].geo;
  388.         else
  389.             Cpgo = 0;
  390.     }
  391.     else
  392.     {
  393.         Cpob = 0;
  394.         Cpgo = 0;
  395.     }
  396.  
  397.     if(Cevt) Evtest();
  398.  
  399.     if     (Active[Cobj] == 4) whenActive();
  400.     else if(Active[Cobj] == 2) whenDeactive();
  401.     else if(Active[Cobj] == 1) isActive();
  402.     else if(Active[Cobj] == 0) isDeactive();
  403.  
  404.     if(Cgeo && (Gtyp[Cgeo] & (1<<4)))
  405.     { 
  406.         doGroup(Cgeo);
  407.         return;
  408.     }
  409.  
  410. }
  411. function doGroup(cgrp)
  412. {
  413.     var gobj;
  414.     gcx = cpox[Cobj];
  415.     gcy = cpoy[Cobj];
  416.     gobj = Cobj;
  417.     for(i = 0; i < Grps[cgrp]; i++)
  418.     { 
  419.         doObject(Grpl[cgrp][i]);
  420.         ob[Cobj].style.left=gcx+cpox[Cobj] - Gszx[Cgeo] * ob[Cobj].cscx;
  421.         ob[Cobj].style.top =gcy+cpoy[Cobj] - Gszy[Cgeo] * ob[Cobj].cscy;
  422.     }
  423.     return;
  424. }
  425. /*************************************************************************/
  426. function UpdPos() {
  427. Lpox = cpox[Cobj];
  428. Lpoy = cpoy[Cobj];
  429. // end of path condition
  430. if(Plen[Cobj] > 0 && atDis[Cobj] >= Plen[Cobj]) 
  431. {
  432.     atDis[Cobj] -= Plen[Cobj];
  433.     DisPt[Cobj]  = 0;
  434.     LastPt[Cobj] = 0;
  435.     cpox[Cobj]   = spox[Cobj];
  436.     cpoy[Cobj]   = spoy[Cobj];
  437. }
  438. if(MType[Cact] & ACT_XPATH_OBJXYZ) 
  439. {
  440.     cpox[Cobj] = cpox[Cpob];
  441.     cpoy[Cobj] = cpoy[Cpob];
  442. }
  443. else if(MType[Cact] & ACT_XPATH_OBJPTH)
  444. {
  445.     if     ((Gtyp[Cpgo] & GEO_TYPE) == 1)
  446.         GetRectLoc();
  447.     else if((Gtyp[Cpgo] & GEO_TYPE) == 2) 
  448.     {
  449.         GetArcLoc();
  450.     }
  451.     else if((Gtyp[Cpgo] & GEO_TYPE) == 3)
  452.     {
  453.         GetPathLoc();
  454.     }
  455.     cpox[Cobj] += cpox[Cpob];
  456.     cpoy[Cobj] += cpoy[Cpob];
  457. }
  458. else
  459. {
  460.     if(MType[Cact] & ACT_XPATH_MOUSE)
  461.         cpox[Cobj] = cmx;
  462.     else
  463.         cpox[Cobj] += dpox[Cobj]; //^^ is this STOP?
  464.  
  465.     if(MType[Cact] & ACT_YPATH_MOUSE)
  466.         cpoy[Cobj] = cmy;
  467.     else
  468.         cpoy[Cobj] += dpoy[Cobj];
  469. }
  470. if(Plen[Cobj] != 0) atDis[Cobj] += disStep[Cobj];
  471. ob[Cobj].style.left=cpox[Cobj] - Gszx[Cgeo] * ob[Cobj].cscx;
  472. ob[Cobj].style.top =cpoy[Cobj] - Gszy[Cgeo] * ob[Cobj].cscy;
  473.  
  474. if(Plen[Cobj] > 0 && atDis[Cobj] >= Plen[Cobj]) 
  475. {
  476.     if(PathCount[Cobj] > 0) PathCount[Cobj]--;
  477.     if(PathCount[Cobj] == 0) {
  478.         EndPath[Cobj] = 1;
  479.         ob[Cobj].style.left=epox[Cobj] - Gszx[Cgeo] * ob[Cobj].cscx;
  480.         ob[Cobj].style.top =epoy[Cobj] - Gszy[Cgeo] * ob[Cobj].cscy;
  481.     }
  482. }
  483. if(Cact) UpdGeo();
  484. return;
  485. }
  486.  
  487. function UpdGeo() {
  488.     var drx = Lpox - cpox[Cobj];
  489.     var dry = Lpoy - cpoy[Cobj];
  490.     if(Math.abs(dry) > Math.abs(drx))
  491.     {
  492.         if    ((dry < 0) && (MDir[Cobj] != 270))
  493.         {
  494.             if(MType[Cact] & (ACT_GEO_SOUTH))
  495.             {
  496.                 ob[Cobj].image.src = Gspt[MGSth[Cact]].src;
  497.             }
  498.             MDir[Cobj] = 270;
  499.         }
  500.         else  if((dry >= 0) && MDir[Cobj] != 90)
  501.         {
  502.             if(MType[Cact] & (ACT_GEO_NORTH))
  503.             { 
  504.                 ob[Cobj].image.src = Gspt[MGNth[Cact]].src;
  505.             }
  506.             MDir[Cobj] = 90;
  507.         }
  508.     }
  509.     else
  510.     {
  511.         if    ((drx > 0) && (MDir[Cobj] != 0))
  512.         {
  513.             if(MType[Cact] & (ACT_GEO_WEST))
  514.             { 
  515.                 ob[Cobj].image.src = Gspt[MGWst[Cact]].src;
  516.             }
  517.             MDir[Cobj] = 0;
  518.         }
  519.         else  if((drx <= 0) && MDir[Cobj] != 180)
  520.         {
  521.             if(MType[Cact] & (ACT_GEO_EAST))
  522.             { 
  523.                 ob[Cobj].image.src = Gspt[MGEst[Cact]].src;
  524.             }
  525.             MDir[Cobj] = 180;
  526.         }
  527.     }
  528. return;
  529. }
  530.  
  531. function UpdStr() {
  532.     if(lstVal[Cobj] == ob[Cobj].val) return;
  533.     lstVal[Cobj] = ob[Cobj].val;
  534.     if(isIE4)
  535.         ob[Cobj].name.innerText = ob[Cobj].val;
  536.     else
  537.         window.status = "Object " + ob[Cobj].name + " Counter=" + ob[Cobj].val;
  538.  
  539.     return;
  540. }
  541.  
  542. function UpdAudio(on)
  543. {
  544.     if(isIE4)
  545.     {
  546.         if(on > 0)
  547.         {
  548.             if(Scnt[Csnd] < 0) Scnt[Csnd] = 9999;
  549.             SoundEffect.loop= Scnt[Csnd];
  550.             SoundEffect.src = Snam[Csnd];
  551. //            SoundEffect.autostart=1;
  552.             lstsnd = Csnd;
  553.         }
  554.         else
  555.         {
  556.             if(lstsnd != Csnd) return;
  557.             SoundEffect.src= " ";
  558.             SoundEffect.loop= 0;
  559.             SoundEffect.autostart=0;
  560.         }
  561.     }
  562.     else if(isNav4) 
  563.     {
  564. //        <embed id = BackMusic  src=Snam[Csnd] autostart=true loop= Scnt[Csnd] hidden=true></embed>
  565.     }
  566. }
  567.  
  568. /**************************************************************************/
  569. function GetArcLoc() {
  570. if(MRate[Cact] > 0) 
  571. {
  572.     cpox[Cobj] = (Math.sin(0.017453292*(-atDis[Cobj]-90)) * Gszx[Cpgo]) * ob[Cpob].cscx;
  573.     cpoy[Cobj] = (Math.cos(0.017453292*(-atDis[Cobj]-90)) * Gszy[Cpgo]) * ob[Cpob].cscy;
  574. }
  575. else 
  576. {
  577.     cpox[Cobj] = (Math.sin(0.017453292*(atDis[Cobj]-90)) * Gszx[Cpgo]) * ob[Cpob].cscx;
  578.     cpoy[Cobj] = (Math.cos(0.017453292*(atDis[Cobj]-90)) * Gszy[Cpgo]) * ob[Cpob].cscy;
  579. }
  580. return;
  581. }
  582. /*************************************************************************/
  583. function GetPathLoc() {
  584. var cPt, nPt, x, y, dis=0.0, ratio=0.0, ct = 0;
  585.  
  586. if(MRate[Cact] > 0) 
  587. {
  588.     while(ct <= Gnpt[Cpgo]) 
  589.     {
  590.         ct ++;
  591.         if(LastPt[Cobj]+1 < Gnpt[Cpgo]) 
  592.         {
  593.             cPt = LastPt[Cobj];
  594.             nPt = cPt + 1; 
  595.         }
  596.         else
  597.         {
  598.             if(Gtyp[Cpgo] & GEO_OPEN) 
  599.             {
  600.                 LastPt[Cobj]  = 0;
  601.                 cPt = 0;
  602.                 nPt = 1; 
  603.             }
  604.             else 
  605.             {
  606.                 LastPt[Cobj]  = Gnpt[Cpgo]-1;
  607.                 cPt = LastPt[Cobj];
  608.                 nPt = 0; 
  609.             }
  610.         }
  611.         x  = (Gpxl[Cpgo][nPt] - Gpxl[Cpgo][cPt]) * ob[Cpob].cscx;
  612.         y  = (Gpyl[Cpgo][nPt] - Gpyl[Cpgo][cPt]) * ob[Cpob].cscy;
  613.         dis = Math.sqrt(x*x + y*y);
  614.         if(atDis[Cobj] < (dis + DisPt[Cobj])) break;
  615.         DisPt[Cobj] += dis;
  616.         LastPt[Cobj]++;
  617.         if(LastPt[Cobj] >= Gnpt[Cpgo]) 
  618.         {
  619.             cPt = 0;
  620.             nPt = 1;
  621.         }
  622.     }
  623.     ratio = (atDis[Cobj] - DisPt[Cobj]) / dis;
  624.     cpox[Cobj] = Gpxl[Cpgo][cPt] * ob[Cpob].cscx + x * ratio;
  625.     cpoy[Cobj] = Gpyl[Cpgo][cPt] * ob[Cpob].cscy + y * ratio;
  626.  
  627.     return;
  628. }
  629. else 
  630. {
  631.     nPt = LastPt[Cobj];
  632.     if(nPt == Gnpt[Cpgo]-1)
  633.         cPt = 0;
  634.     else
  635.         cPt = nPt; 
  636.     while(ct <= Gnpt[Cpgo]) 
  637.     {
  638.         ct ++;
  639.         if(nPt > 0) 
  640.         {
  641.             cPt = nPt;
  642.             nPt--; 
  643.         }
  644.         else 
  645.         {
  646.             if(Gtyp[Cpgo] & GEO_OPEN) 
  647.             {
  648.                 LastPt[Cobj]  = Gnpt[Cpgo]-1;
  649.                 cPt = LastPt[Cobj];
  650.                 nPt = cPt-1; 
  651.             }
  652.             else 
  653.             {
  654.                 cPt = 0;
  655.                 nPt = Gnpt[Cpgo]-1; 
  656.                 LastPt[Cobj]  = nPt;
  657.             }
  658.         }
  659.  
  660.         x  = (Gpxl[Cpgo][nPt] - Gpxl[Cpgo][cPt]) * ob[Cpob].cscx;
  661.         y  = (Gpyl[Cpgo][nPt] - Gpyl[Cpgo][cPt]) * ob[Cpob].cscy;
  662.         dis = Math.sqrt(x*x + y*y);
  663.         if(atDis[Cobj] < (dis + DisPt[Cobj])) break;
  664.         DisPt[Cobj] += dis;
  665.         LastPt[Cobj]--;
  666. //        nPt--;
  667. //        if(nPt < 0) 
  668. //        {
  669. //            cPt = 0;
  670. //            nPt = Gnpt[Cpgo]-1;
  671. //        }
  672.     }
  673.     ratio = (atDis[Cobj] - DisPt[Cobj]) / dis;
  674.     cpox[Cobj] = Gpxl[Cpgo][cPt] * ob[Cpob].cscx + x * ratio;
  675.     cpoy[Cobj] = Gpyl[Cpgo][cPt] * ob[Cpob].cscy + y * ratio;
  676.  
  677.     return;
  678. }
  679. }
  680. /************************************************************************/
  681. function GetRectLoc() 
  682. {
  683. var dis = 0.0;
  684.  
  685. while (0==0) 
  686. {
  687.     if(MRate[Cact] > 0) 
  688.     {
  689.         if(LastPt[Cobj] == 0) 
  690.         {
  691.             dis = (Gpxl[Cpgo][1] - Gpxl[Cpgo][0]) * ob[Cpob].cscx;
  692.             if((DisPt[Cobj] + dis) > atDis[Cobj]) 
  693.             {
  694.                 cpox[Cobj] = Gpxl[Cpgo][0] * ob[Cpob].cscx + atDis[Cobj];
  695.                 cpoy[Cobj] = Gpyl[Cpgo][0] * ob[Cpob].cscy;
  696.                 break; 
  697.             }
  698.             LastPt[Cobj] = 1;
  699.             DisPt[Cobj] += dis; 
  700.         }
  701.         if(LastPt[Cobj] == 1) 
  702.         {
  703.             dis = (Gpyl[Cpgo][1] - Gpyl[Cpgo][0]) * ob[Cpob].cscy;
  704.             if((DisPt[Cobj] + dis) > atDis[Cobj]) 
  705.             {
  706.                 cpox[Cobj] = Gpxl[Cpgo][1] * ob[Cpob].cscx;
  707.                 cpoy[Cobj] = Gpyl[Cpgo][0] * ob[Cpob].cscy + (atDis[Cobj]-DisPt[Cobj]);
  708.                 break;
  709.             }
  710.             DisPt[Cobj] += dis;
  711.             LastPt[Cobj] = 2;
  712.         }
  713.         if(LastPt[Cobj] == 2) 
  714.         {
  715.             dis = (Gpxl[Cpgo][1] - Gpxl[Cpgo][0]) * ob[Cpob].cscx;
  716.             if((DisPt[Cobj] + dis) > atDis[Cobj]) 
  717.             {
  718.                 cpox[Cobj] = Gpxl[Cpgo][1] * ob[Cpob].cscx - (atDis[Cobj]-DisPt[Cobj]);
  719.                 cpoy[Cobj] = Gpyl[Cpgo][1] * ob[Cpob].cscy;
  720.                 break; 
  721.             }
  722.             DisPt[Cobj] += dis;
  723.             LastPt[Cobj] = 3; 
  724.         }
  725.         if(LastPt[Cobj] == 3) 
  726.         {
  727.             dis = (Gpyl[Cpgo][1] - Gpyl[Cpgo][0]) * ob[Cpob].cscy;
  728.             if((DisPt[Cobj] + dis) > atDis[Cobj]) 
  729.             {
  730.                 cpox[Cobj] = Gpxl[Cpgo][0] * ob[Cpob].cscx;
  731.                 cpoy[Cobj] = Gpyl[Cpgo][1] * ob[Cpob].cscy - (atDis[Cobj]-DisPt[Cobj]);
  732.                 break;
  733.             }
  734.         }
  735.     }
  736.     else 
  737.     {
  738.         if(LastPt[Cobj] == 0) 
  739.         {
  740.             dis = (Gpyl[Cpgo][1] - Gpyl[Cpgo][0]) * ob[Cpob].cscy;
  741.             if((DisPt[Cobj] + dis) > atDis[Cobj]) 
  742.             {
  743.                 cpox[Cobj] = Gpxl[Cpgo][0] * ob[Cpob].cscx;
  744.                 cpoy[Cobj] = Gpyl[Cpgo][0] * ob[Cpob].cscy + atDis[Cobj];
  745.                 break; 
  746.             }
  747.             LastPt[Cobj] = 3;
  748.             DisPt[Cobj] += dis; 
  749.         }
  750.         if(LastPt[Cobj] == 3) 
  751.         {
  752.             dis = (Gpxl[Cpgo][1] - Gpxl[Cpgo][0]) * ob[Cpob].cscx;
  753.             if((DisPt[Cobj] + dis) > atDis[Cobj]) 
  754.             {
  755.                 cpox[Cobj] = Gpxl[Cpgo][0] * ob[Cpob].cscx + (atDis[Cobj]-DisPt[Cobj]);
  756.                 cpoy[Cobj] = Gpyl[Cpgo][1] * ob[Cpob].cscy;
  757.                 break;
  758.             }
  759.             DisPt[Cobj] += dis;
  760.             LastPt[Cobj] = 2;
  761.         }
  762.         if(LastPt[Cobj] == 2) 
  763.         {
  764.             dis = (Gpyl[Cpgo][1] - Gpyl[Cpgo][0]) * ob[Cpob].cscy;
  765.             if((DisPt[Cobj] + dis) > atDis[Cobj]) 
  766.             {
  767.                 cpox[Cobj] = Gpxl[Cpgo][1] * ob[Cpob].cscx;
  768.                 cpoy[Cobj] = Gpyl[Cpgo][1] * ob[Cpob].cscy - (atDis[Cobj]-DisPt[Cobj]);
  769.                 break; 
  770.             }
  771.             DisPt[Cobj] += dis;
  772.             LastPt[Cobj] = 1; 
  773.         }
  774.         if(LastPt[Cobj] == 1) 
  775.         {
  776.             dis = (Gpxl[Cpgo][1] - Gpxl[Cpgo][0]) * ob[Cpob].cscx;
  777.             if((DisPt[Cobj] + dis) > atDis[Cobj]) 
  778.             {
  779.                 cpox[Cobj] = Gpxl[Cpgo][1] * ob[Cpob].cscx - (atDis[Cobj]-DisPt[Cobj]);
  780.                 cpoy[Cobj] = Gpyl[Cpgo][0] * ob[Cpob].cscy;
  781.                 break;
  782.             }
  783.         }
  784.     }
  785. }
  786. return;
  787. }
  788. /****************************************************************************/
  789. function Evtest() 
  790. {
  791.     if(Active[Cobj] == 0) 
  792.     {
  793.         if(AEvent[Cevt] & eANDtest)
  794.             ActANDTest();
  795.         else
  796.             ActORTest();
  797.     }
  798.     else if(Active[Cobj] == 1) {
  799.         if(DEvent[Cevt] & eANDtest)
  800.             DeactANDTest();
  801.         else
  802.             DeactORTest();
  803.     }
  804. return;
  805. }
  806. /***************************************************************************/
  807. function ActORTest()
  808. {
  809. if(((AEvent[Cevt] & eDELAY)         && TimeCount() <= 0  ) ||
  810.   ( (AEvent[Cevt] & eOBJECT_ENTER)    && ObjectEnter(AEnter[Cevt])  ) ||
  811.   ( (AEvent[Cevt] & eOBJECT_LEAVE)     && ObjectLeave(ALeave[Cevt])  ) ||
  812.   ( (AEvent[Cevt] & eMOUSE)            && MouseSelect() > 0 ) ||
  813.   ( (AEvent[Cevt] & eMOUSE_OVER)    && MouseOver()   ) ||
  814.   ( (AEvent[Cevt] & eLMOUSE)        && IsMouseLClick()   ) ||
  815.   ( (AEvent[Cevt] & eRMOUSE)        && IsMouseRClick()   ) ||
  816.   ( (AEvent[Cevt] & eKEY)            && KeyChar()   ) ||
  817.   ( (AEvent[Cevt] & eLT_VALUE)        && ob[Cobj].val <  AValue[Cevt]) ||
  818.   ( (AEvent[Cevt] & eEQ_VALUE)        && ob[Cobj].val == AValue[Cevt]) ||
  819.   ( (AEvent[Cevt] & eGT_VALUE)        && ob[Cobj].val >  AValue[Cevt]) ||
  820.   ( (AEvent[Cevt] & eENDPATH)        && EndPath[Cobj]     )   )
  821. Active[Cobj] = 4;
  822. }
  823. /***************************************************************************/
  824. function ActANDTest()
  825. {
  826. if(((AEvent[Cevt] & eDELAY)         && !(TimeCount() <= 0)  ) ||
  827.   ( (AEvent[Cevt] & eOBJECT_ENTER)    && !ObjectEnter(AEnter[Cevt])  ) ||
  828.   ( (AEvent[Cevt] & eOBJECT_LEAVE)     && !ObjectLeave(ALeave[Cevt])  ) ||
  829.   ( (AEvent[Cevt] & eMOUSE)            && !(MouseSelect() > 0) ) ||
  830.   ( (AEvent[Cevt] & eMOUSE_OVER)    && !MouseOver()   ) ||
  831.   ( (AEvent[Cevt] & eLMOUSE)        && !IsMouseLClick()   ) ||
  832.   ( (AEvent[Cevt] & eRMOUSE)        && !IsMouseRClick()   ) ||
  833.   ( (AEvent[Cevt] & eKEY)            && !KeyChar()   ) ||
  834.   ( (AEvent[Cevt] & eLT_VALUE)        && !(ob[Cobj].val <  AValue[Cevt])) ||
  835.   ( (AEvent[Cevt] & eEQ_VALUE)        && !(ob[Cobj].val == AValue[Cevt])) ||
  836.   ( (AEvent[Cevt] & eGT_VALUE)        && !(ob[Cobj].val >  AValue[Cevt])) ||
  837.   ( (AEvent[Cevt] & eENDPATH)        && !EndPath[Cobj]     )   )
  838.   {} else Active[Cobj] = 4;
  839. }
  840. /***************************************************************************/
  841. function DeactORTest()
  842. {
  843.  
  844. if(((DEvent[Cevt] & eDELAY)         && TimeCount() <= 0  ) ||
  845.   ( (DEvent[Cevt] & eOBJECT_ENTER)    && ObjectEnter(DEnter[Cevt])  ) ||
  846.   ( (DEvent[Cevt] & eOBJECT_LEAVE)     && ObjectLeave(DLeave[Cevt])  ) ||
  847.   ( (DEvent[Cevt] & eMOUSE)            && MouseSelect() > 0 ) ||
  848.   ( (DEvent[Cevt] & eMOUSE_OVER)    && !MouseOver()   ) ||
  849.   ( (DEvent[Cevt] & eLMOUSE)        && IsMouseLClick()   ) ||
  850.   ( (DEvent[Cevt] & eRMOUSE)        && IsMouseRClick()   ) ||
  851.   ( (DEvent[Cevt] & eKEY)            && KeyChar()   ) ||
  852.   ( (DEvent[Cevt] & eLT_VALUE)        && ob[Cobj].val <  AValue[Cevt]) ||
  853.   ( (DEvent[Cevt] & eEQ_VALUE)        && ob[Cobj].val == AValue[Cevt]) ||
  854.   ( (DEvent[Cevt] & eGT_VALUE)        && ob[Cobj].val >  AValue[Cevt]) ||
  855.   ( (DEvent[Cevt] & eENDPATH)        && EndPath[Cobj]     )   )
  856.     Active[Cobj] = 2;
  857. }
  858. /***************************************************************************/
  859. function DeactANDTest()
  860. {
  861. if(((DEvent[Cevt] & eDELAY)         && !(TimeCount() <= 0)  ) ||
  862.   ( (DEvent[Cevt] & eOBJECT_ENTER)    && !ObjectEnter(DEnter[Cevt])  ) ||
  863.   ( (DEvent[Cevt] & eOBJECT_LEAVE)     && !ObjectLeave(DLeave[Cevt])  ) ||
  864.   ( (DEvent[Cevt] & eMOUSE)            && !(MouseSelect() > 0) ) ||
  865.   ( (DEvent[Cevt] & eMOUSE_OVER)    && !MouseOver()   ) ||
  866.   ( (DEvent[Cevt] & eLMOUSE)        && !IsMouseLClick()   ) ||
  867.   ( (DEvent[Cevt] & eRMOUSE)        && !IsMouseRClick()   ) ||
  868.   ( (DEvent[Cevt] & eKEY)            && !KeyChar()   ) ||
  869.   ( (DEvent[Cevt] & eLT_VALUE)        && !(ob[Cobj].val <  AValue[Cevt])) ||
  870.   ( (DEvent[Cevt] & eEQ_VALUE)        && !(ob[Cobj].val == AValue[Cevt])) ||
  871.   ( (DEvent[Cevt] & eGT_VALUE)        && !(ob[Cobj].val >  AValue[Cevt])) ||
  872.   ( (DEvent[Cevt] & eENDPATH)        && !EndPath[Cobj]     )   )
  873.   {} else Active[Cobj] = 2;
  874. }
  875. /**************************************************************************/
  876. function TimeCount() {
  877.     if(TimeLeft[Cobj] > 0)  
  878.     {
  879.         if(isNav4) TimeLeft[Cobj] -= 2;
  880.         else       TimeLeft[Cobj] -= 1;
  881.     }
  882.     return (TimeLeft[Cobj]);
  883. }
  884.  
  885. function ObjectEnter(eobj) {
  886. x = Gszx[Cgeo] * ob[Cobj].cscx;
  887. y = Gszy[Cgeo] * ob[Cobj].cscy;
  888. if ( cpox[eobj] >= (cpox[Cobj] - x) && cpox[eobj] <= (cpox[Cobj]) + x &&
  889.       cpoy[eobj] >= (cpoy[Cobj] - y) && cpoy[eobj] <= (cpoy[Cobj]) + y )
  890.     return 1;
  891. return 0;
  892. }
  893.  
  894. function ObjectLeave(eobj) {
  895. x = Gszx[Cgeo] * ob[Cobj].cscx;
  896. y = Gszy[Cgeo] * ob[Cobj].cscy;
  897. if ( cpox[eobj] >= cpox[Cobj] - x && cpox[eobj] <= cpox[Cobj] + x &&
  898.      cpoy[eobj] >= cpoy[Cobj] - y && cpoy[eobj] <= cpoy[Cobj] + y )
  899.     return 0;
  900. return 1;
  901. }
  902.  
  903. function MouseSelect() {
  904. var val = 0;
  905. if(smx == -99999) return val;
  906. x = Gszx[Cgeo] * ob[Cobj].cscx;
  907. y = Gszy[Cgeo] * ob[Cobj].cscy;
  908. if ( smx >= cpox[Cobj] - x && smx <= cpox[Cobj] + x &&
  909.      smy >= cpoy[Cobj] - y && smy <= cpoy[Cobj] + y )
  910.     return val = 1;
  911. return val;
  912. }
  913.  
  914. function MouseOver() {
  915. x = Gszx[Cgeo] * ob[Cobj].cscx;
  916. y = Gszy[Cgeo] * ob[Cobj].cscy;
  917. if ( cmx >= cpox[Cobj] - x && cmx <= cpox[Cobj] + x &&
  918.      cmy >= cpoy[Cobj] - y && cmy <= cpoy[Cobj] + y )
  919.     return 1;
  920. return 0;
  921. }
  922.  
  923. function IsMouseLClick() {
  924. return (slm && 1);
  925. }
  926.  
  927. function IsMouseRClick() {
  928. return (slm && 2);
  929. }
  930.  
  931. function KeyChar() {
  932. if(!sky) return 0;
  933. if(isNav4 && (AKey[Cevt] == sky)) return 1;
  934. if(isIE4  && (IKey[Cevt] == sky)) return 1;
  935. return 0;
  936. }
  937.  
  938. /***************************************************************************/
  939. function isDeactive() {
  940.     if(PathCount[Cobj] != 0) UpdPos();
  941.     if(Gtyp[Cgeo] & GEO_COUNT) UpdStr();
  942.  
  943. return;
  944. }
  945. /***************************************************************************/
  946. function isActive() {
  947.     if(PathCount[Cobj] != 0) UpdPos();
  948.     if(Gtyp[Cgeo] & GEO_COUNT) UpdStr();
  949. return;
  950. }
  951. /***************************************************************************/
  952. function whenActive()
  953. {
  954.     Active[Cobj]  = 1;
  955.     EndPath[Cobj] = 0;
  956.  
  957.     // set default active events
  958.     if(!Cevt)
  959.     {
  960.         TimeLeft[Cobj]  =  0;
  961.         PathCount[Cobj] = 0;
  962.         ob[Cobj].style.visibility = "visible";
  963.     }
  964.     else
  965.     {
  966.         if(WAEvent[Cevt] & (1<<14)) window.location=WALink[Cevt];
  967.         if(WAEvent[Cevt] & (1<<15)) window.location=WALink[Cevt];
  968.  
  969.         if(Csnd > 0) UpdAudio((WAEvent[Cevt] & 16));
  970. //        if(WAEvent[Cevt] & 16)     UpdAudio(); //sound
  971.         if(WAEvent[Cevt] & 8) ob[Cobj].style.visibility = "visible";
  972.         else                  ob[Cobj].style.visibility = "hidden";
  973.  
  974.         TimeLeft[Cobj]  = DTime[Cevt];
  975.  
  976.         if(WAEvent[Cevt] & (1<<5)) Active[WAAObj[Cevt]] = 4;
  977.         if(WAEvent[Cevt] & (1<<7)) Active[WADObj[Cevt]] = 2;
  978.  
  979.         // apply value
  980.         if(WAEvent[Cevt] & (1<<13)) {
  981.             if       ((OpForm[Cevt] & 0x000f) == 0)
  982.                 ob[Cobj].val  = WAForm[Cevt];
  983.             else if((OpForm[Cevt] & 0x000f) == 1)
  984.                 ob[Cobj].val += WAForm[Cevt];
  985.             else if((OpForm[Cevt] & 0x000f) == 2)
  986.                 ob[Cobj].val -= WAForm[Cevt];
  987.             else if((OpForm[Cevt] & 0x000f) == 3)
  988.                 ob[Cobj].val *= WAForm[Cevt];
  989.             else if((OpForm[Cevt] & 0x000f) == 4)
  990.                 if(WAForm[Cevt] != 0) ob[Cobj].val /= WAForm[Cevt];
  991.         }
  992.         // get value
  993.         if(WAEvent[Cevt] & (1<<11)) {
  994.             if       ((WAGOp[Cevt] & 0x000f) == 0)
  995.                 ob[Cobj].val  = ob[WAGVal[Cevt]].val;
  996.             else if((WAGOp[Cevt] & 0x000f) == 1)
  997.                 ob[Cobj].val += ob[WAGVal[Cevt]].val;
  998.             else if((WAGOp[Cevt] & 0x000f) == 2)
  999.                 ob[Cobj].val -= ob[WAGVal[Cevt]].val;
  1000.             else if((WAGOp[Cevt] & 0x000f) == 3)
  1001.                 ob[Cobj].val*= ob[WAGVal[Cevt]].val;
  1002.             else if((WAGOp[Cevt] & 0x000f) == 4)
  1003.                 if(ob[WAGVal[Cevt]].val != 0) ob[Cobj].val /= ob[WAGVal[Cevt]].val;
  1004.         }
  1005.         // send result
  1006.         if(WAEvent[Cevt] & (1<<9)) {
  1007.             if       ((WASOp[Cevt] & 0x000f) == 0)
  1008.                 ob[WASVal[Cevt]].val  = ob[Cobj].val;
  1009.             else if((WASOp[Cevt] & 0x000f) == 1)
  1010.                 ob[WASVal[Cevt]].val += ob[Cobj].val;
  1011.             else if((WASOp[Cevt] & 0x000f) == 2)
  1012.                 ob[WASVal[Cevt]].val -= ob[Cobj].val;
  1013.             else if((WASOp[Cevt] & 0x000f) == 3)
  1014.                 ob[WASVal[Cevt]].val *= ob[Cobj].val;
  1015.             else if((WASOp[Cevt] & 0x000f) == 4)
  1016.                 if(ob[Cobj].val != 0) ob[WASVal[Cobj]].val /= ob[Cobj].val;
  1017.         }
  1018.         if(WAEvent[Cevt] & 4) PathCount[Cobj] = MCount[Cact]; // motion
  1019. //        if(WAEvent[Cevt] & (1<<30)) reset(Cobj);
  1020.         // replace current object components
  1021.         if(WAEvent[Cevt] & (1<<17))
  1022.         {
  1023.             if(WAEvent[Cevt] & (1<<18)) {
  1024.                 ob[Cobj].name = Gnam[WACgeo[Cevt]];
  1025.                 ob[Cobj].geo  = WACgeo[Cevt];
  1026.             }
  1027.             if(WAEvent[Cevt] & (1<<19)) ob[Cobj].att  = WACatt[Cevt];
  1028.             if(WAEvent[Cevt] & (1<<20)) ob[Cobj].act  = WACact[Cevt];
  1029.             if(WAEvent[Cevt] & (1<<22)) ob[Cobj].evt  = WACevt[Cevt];
  1030.             spox[Cobj] = cpox[Cobj];  
  1031.             spoy[Cobj] = cpoy[Cobj];
  1032.             SetPath(Cobj);
  1033.         }
  1034.         // replace additional object components
  1035.         for(ref=0; ref< WACobj[Cevt]; ref++) {
  1036.             if(WAEvent[Cevt] & (1<<18)) {
  1037.                 ob[WANobj[Cevt][ref]].name = Gnam[WACgeo[Cevt]];
  1038.                 ob[WANobj[Cevt][ref]].geo  = WACgeo[Cevt];
  1039.             }
  1040.             if(WAEvent[Cevt] & (1<<19)) ob[WANobj[Cevt][ref]].att  = WACatt[Cevt];
  1041.             if(WAEvent[Cevt] & (1<<20)) ob[WANobj[Cevt][ref]].act  = WACact[Cevt];
  1042.             if(WAEvent[Cevt] & (1<<22)) ob[WANobj[Cevt][ref]].evt  = WACevt[Cevt];
  1043.             spox[WANobj[Cevt][ref]] = cpox[Cobj];  
  1044.             spoy[WANobj[Cevt][ref]] = cpoy[Cobj];
  1045.             SetPath(WANobj[Cevt][ref]);
  1046.         }
  1047.  
  1048.         if(WAEvent[Cevt] & (1<<30)) reset(Cobj);
  1049.     }
  1050. }
  1051. //**************************************************************************
  1052. function whenDeactive()
  1053. {
  1054.  
  1055.     EndPath[Cobj] = 0;
  1056.     Active[Cobj]  = 0;    // is deactive
  1057.  
  1058.     if(!Cevt) 
  1059.     {
  1060.         PathCount[Cobj] = -1;
  1061.         TimeLeft[Cobj]  =  0;
  1062.         ob[Cobj].style.visibility = "hidden";
  1063.     }
  1064.     else
  1065.     {
  1066.         if(WDEvent[Cevt] & 4) PathCount[Cobj] = MCount[Cact]; // motion
  1067.         if(WDEvent[Cevt] & (1<<30)) reset(Cobj);
  1068.  
  1069.         if(Csnd > 0) UpdAudio((WDEvent[Cevt] & 16));    //sound
  1070.         if(WDEvent[Cevt] & 8) ob[Cobj].style.visibility = "visible";
  1071.         else                  ob[Cobj].style.visibility = "hidden";
  1072.  
  1073.         TimeLeft[Cobj]  = ATime[Cevt];
  1074.         if(WDEvent[Cevt] & 4) PathCount[Cobj] = MCount[Cact];    // motion
  1075.         else                  PathCount[Cobj] = 0;
  1076.  
  1077.         if(WDEvent[Cevt] & (1<<5)) Active[WDAObj[Cevt]] = 4;
  1078.         if(WDEvent[Cevt] & (1<<7)) Active[WDDObj[Cevt]] = 2;
  1079.     }
  1080.  
  1081. }
  1082. //**************************************************************************
  1083. function reset(cobj) {
  1084.  
  1085.     cevt = ob[cobj].evt;
  1086.     catt = ob[cobj].att;
  1087.     cact = ob[cobj].act;
  1088.     cgrp = ob[cobj].grp;
  1089.     cgeo = ob[cobj].geo;
  1090.  
  1091.     Active[cobj]    =  0;    // is deactive
  1092.     if(cevt)
  1093.     {
  1094.         if(WDEvent[cevt] & 8) ob[cobj].style.visibility = "visible";
  1095.         else                  ob[cobj].style.visibility = "hidden";
  1096.         if(WDEvent[cevt] & (1<<31)) {
  1097.             PathCount[cobj] = MCount[cact];            // restart path
  1098.             cpox[cobj] = spox[cobj];
  1099.             cpoy[cobj] = spoy[cobj];
  1100.             LastPt[cobj] = 0;
  1101.             atDis[cobj] = 0;
  1102.             DisPt[cobj] = 0;
  1103.             EndPath[cobj] = 0;
  1104.         }
  1105.         if(!(WDEvent[cevt] & 4)) PathCount[cobj] = 0;    // no motion
  1106.         TimeLeft[cobj]  = ATime[cevt];
  1107.     }
  1108.     else
  1109.     {
  1110.         if(ob[cobj].flg & 64)
  1111.             ob[cobj].style.visibility = "hidden";
  1112.         else
  1113.             ob[cobj].style.visibility = "visible";
  1114.  
  1115.         // set action variables
  1116.         if(cact) PathCount[cobj] = MCount[cact]; // motion
  1117.         else     PathCount[cobj] = 0;
  1118.         TimeLeft[cobj]  = 0;
  1119.  
  1120.         cpox[cobj] = spox[cobj];
  1121.         cpoy[cobj] = spoy[cobj];
  1122.         LastPt[cobj] = 0;
  1123.         atDis[cobj] = 0;
  1124.         DisPt[cobj] = 0;
  1125.         EndPath[cobj] = 0;
  1126.     }
  1127.  
  1128.     if(cgeo)
  1129.     {
  1130.         ob[cobj].style.left=cpox[cobj] - Gszx[cgeo] * ob[cobj].cscx;
  1131.         ob[cobj].style.top =cpoy[cobj] - Gszy[cgeo] * ob[cobj].cscy;
  1132.     }
  1133.  
  1134. return;
  1135. }
  1136.  
  1137. /*************************************************************************/
  1138. function SetPath(cobj) {
  1139.  
  1140.     cevt = ob[cobj].evt;    // Objects event
  1141.     catt = ob[cobj].att;    // Objects attribute
  1142.     cact = ob[cobj].act;    // Objects action
  1143.     cgrp = ob[cobj].grp;    // Objects group
  1144.     cgeo = ob[cobj].geo;    // Objects geometry
  1145.     csnd = ob[cobj].snd;    // Objects sound
  1146.     cpob = MPath[cact];        // Object actions path object
  1147.     cpgo = ob[cpob].geo;    // Path objects geometry
  1148.     lstVal[cobj] = ob[cobj].val - 100;
  1149.  
  1150.     MDir[cobj] = -1;
  1151.  
  1152.     if(!cact) {
  1153.         Plen[cobj] = 0;
  1154.         noStep = 0;
  1155.         disStep[cobj] = 0;
  1156.         dpox[cobj] = 0;
  1157.         dpoy[cobj] = 0;
  1158.         PathCount[cobj] = 0;
  1159.     }
  1160.     else {
  1161.         PathCount[cobj] = MCount[cact];
  1162.  
  1163.         if(MType[cact] & ACT_XPATH_MOUSE || MType[cact] & ACT_YPATH_MOUSE) { //^^ replaced with linPath??
  1164.             Plen[cobj] = 1;
  1165.             noStep = 1;
  1166.             disStep[cobj] = 1;
  1167.             dpox[cobj] = 0;
  1168.             dpoy[cobj] = 0;
  1169.         }
  1170.         else if(MType[cact] & ACT_XPATH_OBJPTH || MType[cact] & ACT_XPATH_OBJXYZ) {
  1171.             objPath(cobj,cpob,cpgo);
  1172.         }
  1173.         else
  1174.         {
  1175.             linPath(cobj);
  1176.         }
  1177.     }
  1178.     cpox[cobj] = spox[cobj];
  1179.     cpoy[cobj] = spoy[cobj];
  1180.     LastPt[cobj] = 0;
  1181.     atDis[cobj] = 0;
  1182.     DisPt[cobj] = 0;
  1183.     EndPath[cobj] = 0;
  1184.  
  1185. //    ob[cobj].left=cpox[cobj] - Gszx[cgeo];
  1186. //    ob[cobj].top =cpoy[cobj] - Gszy[cgeo];
  1187.     return;
  1188. }
  1189. //****************************************************************************
  1190. function getPathLenth(cobj,cpob,cgeo)
  1191. // return lenth of transformed path
  1192. {
  1193.     var i, x = 0.0, y = 0.0;
  1194.     Plen[cobj] = 0;
  1195.     // find length of rectangle
  1196.     if        ((Gtyp[cgeo] & GEO_TYPE) == 1) {
  1197.         Plen[cobj] = 2 * (Gpxl[cgeo][1] - Gpxl[cgeo][0]) * ob[cpob].cscx
  1198.                    + 2 * (Gpyl[cgeo][1] - Gpyl[cgeo][0]) * ob[cpob].cscy;
  1199.     }
  1200.     // find length of ellipse
  1201.     else if    ((Gtyp[cgeo] & GEO_TYPE) == 2) {
  1202.         Plen[cobj] = 360;
  1203.     }
  1204.     // find length of polygon
  1205.     else if    ((Gtyp[cgeo] & GEO_TYPE) == 3) {
  1206.         for ( i = 1; i < Gnpt[cgeo]; i++)
  1207.         {
  1208.             x = (Gpxl[cgeo][i] - Gpxl[cgeo][i-1]) * ob[cpob].cscx;
  1209.             y = (Gpyl[cgeo][i] - Gpyl[cgeo][i-1]) * ob[cpob].cscy;
  1210.             Plen[cobj] += Math.sqrt(x*x + y*y);
  1211.         }
  1212.  
  1213.         if(!(Gtyp[cgeo] & GEO_OPEN))
  1214.         {
  1215.             x = (Gpxl[cgeo][Gnpt[cgeo]-1] - Gpxl[cgeo][0]) * ob[cpob].cscx;
  1216.             y = (Gpyl[cgeo][Gnpt[cgeo]-1] - Gpyl[cgeo][0]) * ob[cpob].cscy;
  1217.             Plen[cobj] += Math.sqrt(x*x + y*y);
  1218.         }
  1219.     }
  1220. }
  1221.  
  1222. //************************************************************************************
  1223. function linPath(cobj) {
  1224. epox[cobj] = spox[cobj];
  1225. epoy[cobj] = spoy[cobj];
  1226. var lh = mH;
  1227. var lw = mW;
  1228. if(Version >= 105)
  1229. {
  1230.     lh = lh * (MPLen[cact] / 100.);
  1231.     lw = lw * (MPLen[cact] / 100.);
  1232. }
  1233.  
  1234.     if(MType[cact] & ACT_YPATH_UP) {
  1235.         if(MType[cact] & ACT_PATH_CENTER) {
  1236.             spoy[cobj]     += lh;
  1237.             epoy[cobj] -= lh;
  1238.         }
  1239.         else if(MType[cact] & ACT_PATH_END) {
  1240.             spoy[cobj]     += lh;
  1241.         }
  1242.         else if(MType[cact] & ACT_PATH_START) {
  1243.             epoy[cobj] -= lh;
  1244.         }
  1245.     }
  1246.     else if(MType[cact] & ACT_YPATH_DOWN) {
  1247.         if(MType[cact] & ACT_PATH_START) {
  1248.             epoy[cobj] += lh;
  1249.         }
  1250.         else if(MType[cact] & ACT_PATH_END) {
  1251.             spoy[cobj]     -= lh;
  1252.         }
  1253.         else if(MType[cact] & ACT_PATH_CENTER) {
  1254.             spoy[cobj]     -= lh;
  1255.             epoy[cobj] += lh;
  1256.         }
  1257.     }
  1258.     else if(MType[cact] & ACT_YPATH_MOUSE) {
  1259.         Plen[cobj] = 1;
  1260.         noStep = 1;
  1261.         disStep[cobj] = 1;
  1262.         dpoy[cobj] = 0;
  1263.         spoy[cobj] = cpoy[cobj];
  1264.     }
  1265.  
  1266.     if(MType[cact] & ACT_XPATH_LEFT) {
  1267.         if(MType[cact] & ACT_PATH_CENTER) {
  1268.             spox[cobj]     += lw;
  1269.             epox[cobj]  -= lw;
  1270.         }
  1271.         else if(MType[cact] & ACT_PATH_END) {
  1272.             spox[cobj]     += lw;
  1273.         }
  1274.         else if(MType[cact] & ACT_PATH_START) {
  1275.             epox[cobj]  -= lw;
  1276.         }
  1277.     }
  1278.     else if(MType[cact] & ACT_XPATH_RIGHT) {
  1279.         if(MType[cact] & ACT_PATH_START) {
  1280.             epox[cobj]  += lw;
  1281.         }
  1282.         else if(MType[cact] & ACT_PATH_END) {
  1283.             spox[cobj]     -= lw;
  1284.         }
  1285.         else if(MType[cact] & ACT_PATH_CENTER) {
  1286.             spox[cobj]     -= lw;
  1287.             epox[cobj]  += lw;
  1288.         }
  1289.     }
  1290.     else if(MType[cact] & ACT_YPATH_MOUSE) {
  1291.         Plen[cobj] = 1;
  1292.         noStep = 1;
  1293.         disStep[cobj] = 1;
  1294.         dpox[cobj] = 0;
  1295.         spox[cobj] = cpox[cobj];
  1296.     }
  1297.     var x = epox[cobj] - spox[cobj];
  1298.     var y = epoy[cobj] - spoy[cobj];
  1299.     if(x+y)
  1300.     {
  1301.         Plen[cobj] = Math.sqrt(x*x + y*y);
  1302.         noStep  = Math.abs(Plen[cobj] / MRate[cact]);
  1303.         if(noStep < 1) noStep = 1;
  1304.         disStep[cobj] = Plen[cobj] / noStep;
  1305.         dpox[cobj] = x / noStep;
  1306.         dpoy[cobj] = y / noStep;
  1307.     }
  1308.     else
  1309.     {
  1310.         Plen[cobj] = 0;
  1311.         dpox[cobj] = 0;
  1312.         dpoy[cobj] = 0;
  1313.         disStep[cobj] = 0;
  1314.     }
  1315.     return
  1316. }
  1317.  
  1318. function objPath(cobj,cpob,cpgo) 
  1319. {
  1320.     if        ((Gtyp[cpgo] & GEO_TYPE) == 1) {    
  1321.         spox[cobj] = Gpxl[cpgo][0] * ob[cpob].cscx + ob[cpob].cpox;  
  1322.         spoy[cobj] = Gpyl[cpgo][0] * ob[cpob].cscy + ob[cpob].cpoy;
  1323.         epox[cobj] = spox[cobj];
  1324.         epoy[cobj] = spoy[cobj];
  1325.     }
  1326.     else if    ((Gtyp[cpgo] & GEO_TYPE) == 2) {
  1327.         spox[cobj] = (Gpxl[cpgo][0] - Gpxl[cpob][1]) * ob[cpob].cscx + ob[cpob].cpox;
  1328.         spoy[cobj] = (Gpyl[cpgo][0] - Gpyl[cpob][1]) * ob[cpob].cscy + ob[cpob].cpoy;
  1329.         epox[cobj] = spox[cobj];
  1330.         epoy[cobj] = spoy[cobj];
  1331.     }
  1332.     else if    ((Gtyp[cpgo] & GEO_TYPE) == 3) {
  1333.         spox[cobj] = Gpxl[cpgo][0] * ob[cpob].cscx + ob[cpob].cpox;
  1334.         spoy[cobj] = Gpyl[cpgo][0] * ob[cpob].cscy + ob[cpob].cpoy;
  1335.         if(Gtyp[cpgo] & GEO_OPEN) 
  1336.         {
  1337.             epox[cobj] = Gpxl[cpgo][Gnpt[cpgo]-1] * ob[cpob].cscx + ob[cpob].cpox;
  1338.             epoy[cobj] = Gpyl[cpgo][Gnpt[cpgo]-1] * ob[cpob].cscy + ob[cpob].cpoy;
  1339.         }
  1340.         else 
  1341.         {
  1342.             epox[cobj] = spox[cobj];
  1343.             epoy[cobj] = spoy[cobj];
  1344.         }
  1345.     }
  1346.  
  1347.     getPathLenth(cobj,cpob,cpgo);
  1348.     if(cact)
  1349.         noStep  = Math.abs(Plen[cobj] / MRate[cact]);
  1350.     else
  1351.         noStep = 0;
  1352.     if(noStep < 1) noStep = 1;
  1353.     disStep[cobj] = Plen[cobj] / noStep;
  1354.  
  1355.     return;
  1356. }
  1357.  
  1358. //window.status = " Cobj=" + Cobj + " epox[Cobj]=" + epox[Cobj] + " Cgeo=" + Cgeo;
  1359. //window.status = " Deact cobj=" + cobj + " WDEvent[Cevt] & (1<<5)=" + WDEvent[Cevt] & (1<<5) + " Active[WDAObj[Cevt]]=" + Active[WDAObj[Cevt]];
  1360. //if(Cobj==2) window.status = " Cobj=" + Cobj + " ob[Cobj].val=" + ob[Cobj].val;
  1361. //-->
  1362.